package cn.nr19.jian.token

import cn.nr19.jian.J2Utils
import cn.nr19.jian.`object`.EON


/**
 * 通常用于模块中的循环操作  即  /条件/指令 。 如模块中的列表
 * '/' (STR | E3 | JS | E2) '/[' (zhi WT?)* ']';
 */
class FORX() : NodeValue(){

    var left : Node ?= null // 循环条件
    var right : ARRNode = ARRNode() // 后面的值 无限数量

    override fun toString(): String {
        StringBuilder().let {
            it.append("/")
                .append(left).append("/")
                .append(right)
            return it.toString()
        }
    }


}

// 编辑器用的。
class LAYOUT : Node() {
    override fun nodeType(): ENode = ENode.layout

    //
    var key = ""

    // 属性
    var pars = EON()

    // 级别、深度
    var level = 0

    // 父级
    var parent : LAYOUT ?= null

    // 子视图
    var child = ArrayList<LAYOUT>()

    override fun toString(): String {
         StringBuilder().apply {
            // >>key.par
            for (i in 0 until level){
                append(">")
            }

            append(key)
            pars.forEach {
                append(".").append(it.key)
                append("(")
                if (it.value is String) append("\"${J2Utils.zy(it.value as String)}\"")
                else append(it.value)
                append(")")
            }

             child.forEach {
                 append("\n").append(it.toString())
             }

             return toString()
        }

    }

}


// EON '{' (jian WT?)* '}'

// ARR  shuzu : '[' (zhi WT?)* ']' ;

// EONJ jian : KEY ':' zhi;


// zhi : BOOLEAN | INT | FLOAT | STR  | E3 | E2 | JS | shuzu | lei | jian | forx | funx | leizhonglei | quobj;

